#if !defined(FAKE_D3D11_DEVICE_CHILD_H)
#define FAKE_D3D11_DEVICE_CHILD_H

#include "FakeUnknown.h"

class FakeD3D11DeviceChild : public ID3D11DeviceChild
{
public:
	FAKE_UNKNOWN_IMPL(Unknown);

	virtual void STDMETHODCALLTYPE GetDevice(__out  ID3D11Device **ppDevice) { throw std::exception("Not implemented"); }
	virtual HRESULT STDMETHODCALLTYPE GetPrivateData(__in  REFGUID guid, __inout  UINT *pDataSize, __out_bcount_opt( *pDataSize )  void *pData) { throw std::exception("Not implemented"); }
	virtual HRESULT STDMETHODCALLTYPE SetPrivateData(__in  REFGUID guid, __in  UINT DataSize, __in_bcount_opt( DataSize )  const void *pData) { throw std::exception("Not implemented"); }
	virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface(__in  REFGUID guid, __in_opt  const IUnknown *pData) { throw std::exception("Not implemented"); }
};

#define FAKE_D3D11_DEVICE_CHILD_IMPL(member_)																									\
	FAKE_UNKNOWN_IMPL(Unknown);																													\
	FakeD3D11DeviceChild member_;																												\
	virtual void STDMETHODCALLTYPE GetDevice(__out  ID3D11Device **ppDevice)																	\
	{ return member_.GetDevice(ppDevice); }																										\
	virtual HRESULT STDMETHODCALLTYPE GetPrivateData(__in  REFGUID guid, __inout  UINT *pDataSize, __out_bcount_opt( *pDataSize )  void *pData)	\
	{ return member_.GetPrivateData(guid, pDataSize, pData); }																					\
	virtual HRESULT STDMETHODCALLTYPE SetPrivateData(__in  REFGUID guid, __in  UINT DataSize, __in_bcount_opt( DataSize )  const void *pData)	\
	{ return member_.SetPrivateData(guid, DataSize, pData); }																					\
	virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface(__in  REFGUID guid, __in_opt  const IUnknown *pData)								\
	{ return member_.SetPrivateDataInterface(guid, pData); }


#endif
